#!/usr/bin/env python3
"""
重新构建 C 扩展并诊断问题
"""
import os
import sys
import shutil
import subprocess

def clean_build():
    """清理构建目录"""
    print("🧹 清理构建目录...")
    
    dirs_to_clean = ['build', 'my_package.egg-info', 'dist']
    for dir_name in dirs_to_clean:
        if os.path.exists(dir_name):
            shutil.rmtree(dir_name)
            print(f"   清理: {dir_name}")
    
    # 清理 pyd 文件
    pyd_file = "my_package/c_module/my_c_string.pyd"
    if os.path.exists(pyd_file):
        os.remove(pyd_file)
        print(f"   清理: {pyd_file}")

def rebuild_extension():
    """重新构建扩展"""
    print(f"\n🔨 重新构建扩展...")
    
    try:
        # 卸载现有包
        print("1. 卸载现有包...")
        subprocess.run([sys.executable, '-m', 'pip', 'uninstall', 'my-package', '-y'], 
                      capture_output=True)
        
        # 重新安装
        print("2. 重新安装包...")
        result = subprocess.run([
            sys.executable, '-m', 'pip', 'install', '-e', '.', '-v', '--force-reinstall'
        ], capture_output=False, text=True)
        
        return result.returncode == 0
        
    except Exception as e:
        print(f"❌ 构建失败: {e}")
        return False

def test_import():
    """测试导入"""
    print(f"\n🧪 测试导入...")
    
    try:
        # 重新加载模块
        if 'my_package' in sys.modules:
            del sys.modules['my_package']
        if 'my_package.c_module' in sys.modules:
            del sys.modules['my_package.c_module']
        if 'my_package.c_module.my_c_string' in sys.modules:
            del sys.modules['my_package.c_module.my_c_string']
        
        # 测试导入
        import my_package.c_module.my_c_string as ext
        print("✅ 导入成功!")
        
        # 测试函数调用
        if hasattr(ext, 'my_c_string'):
            result = ext.my_c_string()
            print(f"✅ 函数调用成功: {result}")
        else:
            print("⚠️  未找到 my_c_string 函数")
            print(f"可用属性: {dir(ext)}")
        
        return True
        
    except Exception as e:
        print(f"❌ 导入失败: {e}")
        import traceback
        traceback.print_exc()
        return False

def main():
    print("🔄 重新构建 C 扩展")
    print("=" * 50)
    
    # 检查当前目录
    if not os.path.exists('pyproject.toml'):
        print("❌ 请在项目根目录运行此脚本")
        return
    
    print("✅ 在项目根目录")
    
    # 清理
    clean_build()
    
    # 重新构建
    if rebuild_extension():
        print("\n✅ 构建成功!")
        
        # 测试导入
        if test_import():
            print("\n🎉 一切正常!")
        else:
            print("\n❌ 导入测试失败")
            print("建议运行: python diagnose_dll_issue.py")
    else:
        print("\n❌ 构建失败")

if __name__ == "__main__":
    main() 